"""
我用自己的方法 代码 ,作图
这里用老师的代码实现下
"""
# 导入绘图包
from pyecharts.charts import Bar, Timeline
# 导入 系统配置 标签配置项.  画面动画(全局配置 )
from pyecharts.options import LabelOpts, AnimationOpts
# 导入功能(全局配置 )  标题和图例,工具箱,视觉映射
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
# 导入主题
from pyecharts.globals import ThemeType

# 记事本打开文件,文件编码是ANSI,就是跟随系统编码 本系统中文系统 编码 GB2312  .也可以输入这个
文件对象 = open("D:/python黑马/资料数据/1960-2019全球GDP数据.csv", "r", encoding="ANSI")
列表每一行 = 文件对象.readlines()

# 删除第一行
列表每一行.pop(0)

字典数据 = {}
for 元素 in 列表每一行:
    临时列表 = 元素.split(",")  # 分割字符串
    # 把年份取出来
    年份 = int(临时列表[0])  # 取出的是字符串,转换成为数字
    # 把国家名取出来
    国家 = 临时列表[1]
    # 把国家GDP数据取出来
    GDP数据 = float(临时列表[2])  # 数据里由于有科学计数法,要转换成浮点数

    # 下面开始写入字典
    try:
        # 年份 是密钥所以只能有一个,在检查到重复年份时,会报错.   注意:如果是赋值是不会报错的,但如果是 运算就会报错
        字典数据[年份].append([国家, GDP数据])
    except KeyError:
        字典数据[年份] = []   # 添加一个字典元素  元素形式这个是 { 年份:[] } ,这样的操作,年份 是密钥对应 空列表
        字典数据[年份].append([国家, GDP数据])  # 由于密钥对应的是 列表 所以可以使用列表操作 追加元素到后面.  这样循环依次追加入列表 列表套列表


# 先取出字典里年份,作为时间线的数据
年份列表 = 字典数据.keys()  # 年份是密钥,读取字典里所有的密钥
年份列表 = list(年份列表)  # 转换成列表
年份列表.sort()    # 列表排序 默认升序

时间轴 = Timeline()

for 年份 in 年份列表:
    字典数据[年份].sort(key=lambda 下标: 下标[1], reverse=True)  # 列表排序
    前排国家和GDP = 字典数据[年份][:8:]
    X轴_国家 = []
    Y轴_GDP = []
    for 国家和GDP in 前排国家和GDP:
        X轴_国家.append(国家和GDP[0])
        Y轴_GDP.append(int(国家和GDP[1] / 1_0000_0000))

    柱状图 = Bar()
    柱状图.add_xaxis(X轴_国家)
    柱状图.add_yaxis("GDP(亿)", Y轴_GDP, label_opts=LabelOpts(position="top"))

    # 设置全局配置项
    柱状图.set_global_opts(
                            # 标题选项  pos是位置 left是左边 (这里我们居中)  bottom是底部 (底部百分之1)
                            title_opts=TitleOpts(title=f"{年份}排名前8国家GDP", pos_left="center", pos_bottom="1%")
                        )

    时间轴.add(柱状图, str(年份))


# 添加时间轴一些设置
时间轴.add_schema(
                play_interval=1000,  # 动画播放间隔时间(毫秒)
                is_auto_play=True,  # 是否自动播放动画
                is_loop_play=False  # 是否循环播放
)

# 输出成品图
时间轴.render()
